Caching হলো এমন একটি প্রক্রিয়া যেখানে ডেটা বা অবজেক্টকে ডাটাবেস থেকে পুনরায় লোড করার পরিবর্তে মেমোরিতে রাখা হয়। এটি অ্যাপ্লিকেশন পারফরম্যান্স বাড়াতে এবং ডাটাবেসের লোড কমাতে সাহায্য করে। Hibernate-এ, ক্যাশিং একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা ডেটাবেসে বারবার কুয়েরি চালানোর পরিবর্তে ডেটা দ্রুত সরবরাহ করতে সহায়তা করে।
Caching এর মূল ধারণা
Caching সিস্টেম সাধারণত অ্যাপ্লিকেশন এবং ডাটাবেসের মধ্যে একটি মধ্যস্থ লেয়ার হিসেবে কাজ করে। এটি ডেটা সংরক্ষণ করে এবং প্রয়োজন অনুযায়ী তা পুনরায় ব্যবহারযোগ্য করে তোলে।
প্রয়োজনীয়তা
- ডাটাবেস কুয়েরির সংখ্যা কমানো।
- ডাটাবেস অ্যাক্সেসের জন্য সময় হ্রাস করা।
- অ্যাপ্লিকেশন পারফরম্যান্স উন্নত করা।
Hibernate-এ Caching এর ধরণ
Hibernate-এ দুটি ক্যাশিং লেভেল রয়েছে:
১. First Level Cache (প্রথম স্তরের ক্যাশিং)
- Hibernate-এর ডিফল্ট ক্যাশিং।
Session-এর সাথে যুক্ত।- প্রতিটি Hibernate
Session-এর নিজস্ব আলাদা ক্যাশ রয়েছে। - একই
Sessionএর মধ্যে পুনরায় ডেটা রিট্রিভ করার সময় ডেটাবেস কুয়েরি না করে মেমোরি থেকে ডেটা প্রদান করে।
উদাহরণ:
Session session = sessionFactory.openSession();
Product product1 = session.get(Product.class, 1L); // ডাটাবেস থেকে লোড
Product product2 = session.get(Product.class, 1L); // ক্যাশ থেকে লোড
২. Second Level Cache (দ্বিতীয় স্তরের ক্যাশিং)
- ডিফল্টভাবে সক্রিয় নয়; এটি কনফিগার করতে হয়।
SessionFactory-এর সাথে যুক্ত।- ভিন্ন
Sessionএর মধ্যে ডেটা শেয়ার করা যায়। - প্রায়ই বড় ডাটাসেটের জন্য ব্যবহৃত হয়।
ক্যাশিং সরঞ্জাম: Hibernate Second Level Cache বাস্তবায়নের জন্য নিচের ক্যাশিং লাইব্রেরি ব্যবহার করা যেতে পারে:
- EhCache
- Hazelcast
- Infinispan
- Caffeine
Hibernate-এ Caching এর সেটআপ
First Level Cache
Hibernate-এ First Level Cache ডিফল্টভাবে সক্রিয় থাকে এবং এর জন্য কোনো অতিরিক্ত কনফিগারেশন প্রয়োজন হয় না।
Second Level Cache সেটআপ (EhCache উদাহরণ)
১. Maven ডিপেনডেন্সি যোগ করা
pom.xml ফাইলে Second Level Cache এর জন্য EhCache ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.6.5.Final</version>
</dependency>
২. Hibernate কনফিগারেশন
application.properties বা application.yml ফাইলে Second Level Cache সক্রিয় করতে নিম্নলিখিত সেটিংস যুক্ত করুন:
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
spring.jpa.properties.hibernate.cache.use_query_cache=true
৩. Entity-তে ক্যাশিং সক্রিয় করা
ক্যাশিং সক্রিয় করতে Entity ক্লাসে @Cache অ্যানোটেশন ব্যবহার করুন:
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Product {
@Id
private Long id;
private String name;
private Double price;
// Getters and Setters
}
Caching এর সুবিধা
- পারফরম্যান্স বৃদ্ধি:
ক্যাশিং সরাসরি মেমোরি থেকে ডেটা সরবরাহ করে, যা ডাটাবেস অ্যাক্সেসের সময় কমায়। - ডাটাবেস লোড কমানো:
ক্যাশ ব্যবহারে ডাটাবেসে বারবার একই ডেটা কুয়েরি করার প্রয়োজন হয় না। - অ্যাপ্লিকেশন রেসপন্স টাইম কমানো:
ডেটা দ্রুত রিট্রিভ হওয়ায় অ্যাপ্লিকেশনের রেসপন্স টাইম উন্নত হয়। - নেটওয়ার্ক ট্রাফিক কমানো:
ডাটাবেস সার্ভার এবং অ্যাপ্লিকেশন সার্ভারের মধ্যে ট্রাফিক কম হয়।
Caching ব্যবহারের সময় সতর্কতা
- Outdated ডেটা:
ক্যাশিং ব্যবহারে নিশ্চিত করতে হবে যে ডেটা আপডেটেড আছে। প্রয়োজন হলে ক্যাশ ইনভ্যালিডেট করার ব্যবস্থা রাখতে হবে। - Memory Management:
বড় ডেটাসেট ক্যাশে সংরক্ষণ করার সময় মেমোরি ব্যবস্থাপনার দিকে নজর রাখতে হবে। - Concurrency Control:
ক্যাশ ব্যবহারে সঠিক কনকারেন্সি কৌশল নির্ধারণ করা জরুরি, যেমন:READ_WRITE,NONSTRICT_READ_WRITE, ইত্যাদি।
Hibernate-এর Caching অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করার একটি গুরুত্বপূর্ণ কৌশল। First Level Cache স্বয়ংক্রিয় হলেও Second Level Cache কনফিগার করে বড় ডেটাসেট এবং জটিল অ্যাপ্লিকেশনগুলোর জন্য আরও কার্যকর সমাধান পাওয়া যায়।
Read more